package com.virtualightning.mvvm.fragments

import android.view.View
import com.virtualightning.mvvm.widget.SwitchView

/**
 *  Anchor : Create by CimZzz
 *  Time : 2021/1/26 19:20:06
 *  Project : zxs-new
 *  视图状态 Fragment
 */
abstract class ViewStateFragment : SwitchableFragment() {
    ///////////////////////////////////////////////////////////////////////////
    // Add by CimZzz on 2021/1/26 下午7:27
    // 视图状态配置选项
    ///////////////////////////////////////////////////////////////////////////
    private var options: Options? = null

    ///////////////////////////////////////////////////////////////////////////
    // Add by CimZzz on 2021/1/26 下午7:24
    // 配置几种状态 View
    ///////////////////////////////////////////////////////////////////////////
    override fun configSwitchView(switchView: SwitchView) {
        val options = getViewStateOptions()
        this.options = options
        options?.loadingLayoutId?.let {
            switchView.addGenerator(it)
        }
        options?.errorLayoutId?.let {
                viewId ->
            switchView.addGenerator(viewId) Generator@ {
                    genView ->
                val clickId = options.errorClickId
                if(clickId != null) {
                    val clickView = genView.findViewById<View>(clickId)
                    if(clickView != null) {
                        clickView.setOnClickListener {
                            onErrorStateClick()
                        }
                        return@Generator
                    }
                }

                genView.setOnClickListener {
                    onErrorStateClick()
                }
            }
        }
        options?.emptyLayoutId?.let {
            switchView.addGenerator(it) Generator@ {
                    genView ->
                val clickId = options.errorClickId
                if(clickId != null) {
                    val clickView = genView.findViewById<View>(clickId)
                    if(clickView != null) {
                        clickView.setOnClickListener {
                            onEmptyStateClick()
                        }
                        return@Generator
                    }
                }

                genView.setOnClickListener {
                    onEmptyStateClick()
                }
            }
        }
    }


    ///////////////////////////////////////////////////////////////////////////
    // Add by CimZzz on 2021/1/26 下午7:19
    // 显示加载动画
    ///////////////////////////////////////////////////////////////////////////
    protected open fun showLoading() {
        showView(options?.loadingLayoutId)
    }

    ///////////////////////////////////////////////////////////////////////////
    // Add by CimZzz on 2021/1/26 下午7:11
    // 显示失败内容
    ///////////////////////////////////////////////////////////////////////////
    protected open fun showError() {
        showView(options?.errorLayoutId)
    }

    ///////////////////////////////////////////////////////////////////////////
    // Add by CimZzz on 2021/1/26 下午7:12
    // 显示空内容
    ///////////////////////////////////////////////////////////////////////////
    protected open fun showEmpty() {
        showView(options?.emptyLayoutId)
    }

    ///////////////////////////////////////////////////////////////////////////
    // Add by CimZzz on 2021/1/26 下午2:30
    // 初始化配置选项
    ///////////////////////////////////////////////////////////////////////////
    open fun getViewStateOptions(): Options? = null

    ///////////////////////////////////////////////////////////////////////////
    // Add by CimZzz on 2021/1/26 下午7:22
    // 点击加载失败布局中触点 Id 回调
    ///////////////////////////////////////////////////////////////////////////
    open fun onErrorStateClick() {}

    ///////////////////////////////////////////////////////////////////////////
    // Add by CimZzz on 2021/6/7 11:00 PM
    // 点击加载为空布局中触点 Id 回调
    ///////////////////////////////////////////////////////////////////////////
    open fun onEmptyStateClick() {}

    ///////////////////////////////////////////////////////////////////////////
    // Add by CimZzz on 2021/1/26 上午10:18
    // RecyclerView 配置
    ///////////////////////////////////////////////////////////////////////////
    data class Options (
        // 加载中布局 Id
        val loadingLayoutId: Int? = null,
        // 加载失败的布局 Id
        val errorLayoutId: Int? = null,
        // 加载失败布局中点击刷新的 View Id
        val errorClickId: Int? = null,
        // 加载为空的布局 Id
        val emptyLayoutId: Int? = null,
        // 加载为空的布局中点击刷新的 View Id
        val emptyClickId: Int? = null,
    )
}